home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / VLA_FONT.ZIP / DOFONT.ASM next >
Assembly Source File  |  1993-09-28  |  3KB  |  149 lines

  1.     IDEAL
  2.     DOSSEG
  3.     MODEL SMALL
  4.     STACK 200h
  5.     CODESEG
  6.     p386
  7.  
  8. InputStatus1=   3dah
  9. MISC_OUTPUT =   3c2h
  10. SC_Index    =   3c4h
  11. CRTC_Index  =   3d4h
  12. Graph_Index =   3ceh
  13. Attr_Index  =   3c0h    ;don't forget to clear flipflop & set bit 5 on index
  14. PEL_Write   =   3c8h
  15. PEL_Read    =   3c7h
  16. PEL_Data    =   3c9h
  17.  
  18. VGASeg      dw  0A000h
  19. VGAcSeg     dw  0B800h
  20.  
  21. STRUC FNT_Header
  22.     Id          db  "VLAFNT"
  23.     X           db  1           ;widths in BYTES (8 pixels)
  24.     Y           db  8
  25.     NumChr      db  ?
  26.     StartChr    db  " "         ;char to start with
  27. ENDS
  28.  
  29. INCLUDE "MCLSUB.INC"
  30.  
  31. FNTHead FNT_Header  <>
  32. ────────────────────────────────────────────────────────────────────────────
  33. MACRO @vidmemm0                    ; Vidmem mode 0 (character bitmap dat)
  34.         mov dx,3c4h
  35.         mov ax,00402h
  36.         out dx,ax
  37.         mov ax,00604h
  38.         out dx,ax
  39.         ──
  40.         mov dx,3ceh
  41.         mov ax,00005h
  42.         out dx,ax
  43.         mov ax,00c06h
  44.         out dx,ax
  45.         mov ax,00204h
  46.         out dx,ax
  47. ENDM
  48.  
  49. MACRO @vidmemm1                       ; Vidmem mode 1 (screen character dat)
  50.         mov dx,3c4h
  51.         mov ax,00302h
  52.         out dx,ax
  53.         mov ax,00204h
  54.         out dx,ax
  55.         ──
  56.         mov dx,3ceh
  57.         mov ax,01005h
  58.         out dx,ax
  59.         mov ax,00e06h
  60.         out dx,ax
  61.         mov ax,00004h
  62.         out dx,ax
  63. ENDM
  64.  
  65. FileName_FNT    db  100 dup (0)
  66. EXT_FNT         db  ".FNT",0
  67.  
  68. HANDLE_FNT      dw  ?
  69.  
  70. PROC LoadAndDumpFont NEAR
  71.     pusha
  72.     push    ds es
  73.  
  74.     mov     ax,cs
  75.     mov     ds,ax
  76.     mov     ax,3d00h
  77.     mov     dx,offset FileName_FNT
  78.     int     21h
  79.     jc      @@Abort
  80.     mov     bx,ax
  81.     mov     [cs:HANDLE_FNT],bx
  82.  
  83.     mov     dx,offset FNThead       ;read in the header
  84.     mov     ah,3fh
  85.     mov     cx,(size FNT_Header)
  86.     int     21h
  87.  
  88.     mov     ds,[cs:VGAcSeg]
  89.     mov     es,[cs:VGAcSeg]
  90.     @VidMemM0
  91.     movzx   di,[cs:FNTHead.StartChr]
  92.     shl     di,5
  93.     
  94.     movzx   si,[cs:FNTHead.NumChr]
  95.  
  96.     mov     bx,[cs:HANDLE_FNT]
  97. @@ReadLoop:
  98.     mov     dx,di
  99.     movzx   cx,[cs:FNTHead.Y]
  100.     mov     ah,3fh
  101.     int     21h
  102.  
  103.     add     di,cx
  104.     sub     cx,32
  105.     neg     cx
  106.     xor     al,al
  107.     cld
  108.     rep     stosb
  109.  
  110.     dec     si
  111.     jne     @@ReadLoop
  112.  
  113.     @VidMemM1
  114.  
  115.     mov     bx,[cs:HANDLE_FNT]
  116.     mov     ah,3eh
  117.     int     21h
  118.  
  119.   ;  mov     dx,3d4h         ;set char height
  120.   ;  mov     al,9
  121.   ;  out     dx,al
  122.   ;  inc     dx
  123.   ;  in      al,dx
  124.   ;  and     al,11100000b
  125.   ;  or      al,[cs:FNThead.Y]
  126.   ;  out     dx,al
  127.  
  128. @@Abort:
  129.     pop     es ds
  130.     popa
  131.     ret
  132. ENDP
  133.  
  134.  
  135. START:
  136.     mov     ax,cs
  137.     mov     ds,ax
  138.  
  139.     mov     bx,offset EXT_FNT
  140.     mov     dx,offset FileName_FNT
  141.     mov     bp,0                    ;only put ext if none exists
  142.     call    GetCommandLine
  143.  
  144.     call    LoadAndDumpFont
  145.  
  146.     mov     ax,4c00h
  147.     int     21h
  148. END START
  149.